﻿using sipfe.model.dataAccess;
using sipfe.util;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace sipfe.model.mante
{
    public class DependenciaManteDAO
    {
        private BDSIPFEEntities db = new BDSIPFEEntities();

        /*LISTAR TABLAS*/
        public SIPMaeDependencia sipMaeDependenciaByIdDAO(decimal nIdeDep)
        {
            return db.SIPMaeDependencia.Find(nIdeDep);
        }

        /*ACTUALIZAR TABLAS*/
        public String[] updateSIPMaeDependenciaDAO(SIPMaeDependencia sipMaeDependencia)
        {
            db.Entry(sipMaeDependencia).State = EntityState.Modified;
            db.SaveChanges();
            return new String[] { sipMaeDependencia.nIdeDep.ToString(), sipMaeDependencia.vDescripcion };
        }

        /*REGISTRAR TABLAS*/
        public string AgregarCompendioDetalleDAO_old(SIPMaeDependencia sipMaeDependencia)
        {
            db.SIPMaeDependencia.Add(sipMaeDependencia);
            db.SaveChanges();
            return (sipMaeDependencia.nIdeDep > 0) ? "1" : "error";
        }

        public String[] AgregarTablaInpDAO(SIPMaeDependencia sipMaeDependencia)
        {
            int nTipoDep    =  Constante.getInstance().N_IDE_TIPO_DEP;

            int cantRegiones = db.SIPMaeDependencia.Where(x => x.nIdeTipoDep == nTipoDep).ToList().Count();
            decimal codDepRegion = (cantRegiones + 10) * (100000000000000);
            sipMaeDependencia.nCodDep = codDepRegion;
            
            db.SIPMaeDependencia.Add(sipMaeDependencia);
            db.SaveChanges();

            //actualizamos el codigo de la region a la que pertenece
            // db.SIPDetCompendio.Find(nIdeDetalle);
            SIPMaeDependencia SIPMaeDependenciaAux = new SIPMaeDependencia();
            SIPMaeDependenciaAux = db.SIPMaeDependencia.Find(sipMaeDependencia.nIdeDep);
            SIPMaeDependenciaAux.nIdeDepRegion = sipMaeDependencia.nIdeDep;
            db.Entry(sipMaeDependencia).State = EntityState.Modified;
            db.SaveChanges();

            return new String[] { sipMaeDependencia.nIdeDep.ToString(), sipMaeDependencia.vDescripcion};
        }

        public String[] updateDependenciaDAO(SIPMaeDependencia sipMaeDependencia)
        {
            db.Entry(sipMaeDependencia).State = EntityState.Modified;
            db.SaveChanges();
            return new String[] { sipMaeDependencia.nIdeDep.ToString(), sipMaeDependencia.vDescripcion };
        }

        public String[] addHijoAlaDependenciaDAO(SIPMaeDependencia sipMaeDependencia)
        {
            db.SIPMaeDependencia.Add(sipMaeDependencia);
            db.SaveChanges();
            return new String[] { sipMaeDependencia.nIdeDep.ToString(), sipMaeDependencia.vDescripcion };
        }

        public int cerrarVigenciaCompDetalleDAO_old(decimal nIdeDetalle, DateTime hoy)
        {

            SIPDetCompendio sipDetCompendio = new SIPDetCompendio();
            sipDetCompendio = db.SIPDetCompendio.Find(nIdeDetalle);
            sipDetCompendio.dFecFinVig = hoy;
            db.Entry(sipDetCompendio).State = EntityState.Modified;
            // db.SaveChanges();

            //cerramos vigencia de los elementos de los grupos, si es que existen
            var ListaElementosGrupo = db.SIPDetCompGrupo.Where(s => s.nIdeDetalleGrupo == nIdeDetalle).ToList();
            ListaElementosGrupo.ForEach(x => x.dFecFinVig = hoy);
            db.SaveChanges();

            return (sipDetCompendio.dFecFinVig != null) ? 1 : 0;

        }


        public int cerrarVigenciaDepDAO(decimal nIdeDep, DateTime ayer)
        {
            SIPMaeDependencia sipMaeDependencia = new SIPMaeDependencia();
            sipMaeDependencia = db.SIPMaeDependencia.Find(nIdeDep);
            sipMaeDependencia.dFecFinVig = ayer;
            db.Entry(sipMaeDependencia).State = EntityState.Modified;
            //cerramos vigencia de los hijos, si es que existen
            var ListaHijos = db.SIPMaeDependencia.Where(s => s.nIdeDepPadre == nIdeDep).ToList();
            ListaHijos.ForEach(x => x.dFecFinVig = ayer);
            db.SaveChanges();
            return (sipMaeDependencia.dFecFinVig != null) ? 1 : 0;
        }
    }
}
